home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Tools⁄Additions / InsideBa1994 / InsideBasic-94 / IB 94 / Offscreen Printing / OffScreen Print Demo.BAS (Z)
Encoding:
Text File  |  1991-05-26  |  2.3 KB  |  90 lines  |  [TEXT/ZBAS]

  1. '
  2. '∑∑∑œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ∑∑∑
  3. 'Equates
  4. '∑∑∑œœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ∑∑∑
  5.  
  6. DIM T,L,B,R:'                                        Generic rectangle
  7. '
  8. ' --------------------------------------------- For off-screen bitmaps
  9. DIM BitMap&,RowBytes,MapT,MapL,MapB,MapR
  10. '
  11. True = NOT(False)
  12.  
  13. '⁄€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
  14.  
  15. LONG FN KillPort(Port&)
  16.           OSErr = FN DISPOSPTR(PEEK LONG(Port&+2))
  17.   CALL CLOSEPORT(Port&)
  18.   OSErr = FN DISPOSPTR(Port&)
  19. END FN
  20.  
  21. '⁄€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
  22.  
  23. LONG FN MakePort
  24.   CALL GETPORT(OnScreen&)              :'          get current port
  25.   BLOCKMOVE OnScreen&+16,VARPTR(MapT),8 :'       get the port's rect
  26.   MemAvail& = FN FREEMEM
  27.   RowBytes = (( MapR+15)/8+1) AND &7FFE
  28.   NumRows = MapB-MapT
  29.   BMapSz& = RowBytes * NumRows
  30.   LONG IF BMapSz& < MemAvail& + 25000
  31.     BitMap& = FN NEWPTR(BMapSz&)
  32.     OffScreen& = FN NEWPTR(108)               :'size of a grafport
  33.     CALL OPENPORT(OffScreen&)              :'calls setport internally
  34.     CALL SETPORTBITS(BitMap&)
  35.     CALL ERASERECT(MapT)
  36.     CALL SETPORT(OnScreen&)
  37.     QDErr = False
  38.   XELSE
  39.     QDErr = True
  40.   END IF
  41. END FN = QDErr
  42. '
  43. '⁄€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
  44.  
  45. '
  46. ' this must be compiled to an app to work on a print spooler.
  47. '
  48. WINDOW OFF:COORDINATE WINDOW
  49. DEF MOUSE=-1:CURSOR 4:WIDTH -2
  50. '
  51. WINDOW 1,"OffScreen Print Test",(30,40)-(480,320),17
  52. CALL MOVETO(20,20)
  53. CALL LINETO(100,100)
  54. PEN 1,1,1,8,0
  55. PRINT:PRINT
  56. PRINT "Press RETURN to bring offscreen data onscreen." 
  57. '
  58. QDErr = FN MakePort:'          makes on offscreen grafport called OffScreen&
  59. LONG IF NOT QDErr
  60.   CALL SETPORT(OffScreen&)
  61.   CALL MOVETO(20,20)
  62.   CALL DRAWSTRING("This is offscreen for now.")
  63.   T = 200 : L = 200 : B = 250 : R = 300
  64.   PEN 1,1,1,8,0
  65.   CALL PAINTRECT(T)
  66.   '
  67.   CALL SETPORT(OnScreen&)
  68.   INPUT " ";R$
  69.   CALL COPYBITS(#OffScreen&+2,#OnScreen&+2,MapT,MapT,8,0)
  70.   PRINT%(20,260)"Press RETURN to print offscreen data.";
  71.   INPUT R$
  72.   '
  73.   DEF PAGE
  74.   LONG IF NOT PRCANCEL
  75.     DEF LPRINT
  76.     LONG IF NOT PRCANCEL
  77.       ROUTE 128
  78.       CALL GETPORT(PrPort&)
  79.       CALL COPYBITS(#OffScreen&+2,#PrPort&+2,MapT,MapT,0,0)
  80.       ROUTE 0
  81.       CLOSE LPRINT
  82.     END IF
  83.   END IF
  84.   FN KillPort (OffScreen&)
  85. END IF
  86. END
  87.    
  88.        
  89.  
  90.